package com.timebank.score.service.impl;

import com.timebank.common.core.exception.ServiceException;
import com.timebank.common.core.web.pojo.AjaxResult;
import com.timebank.common.security.utils.SecurityUtils;
import com.timebank.score.mapper.GoodsTypeMapper;
import com.timebank.score.pojo.entity.GoodsType;
import com.timebank.score.service.GoodsTypeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author shiliuyinzhen
 */
@Service
public class GoodsTypeServiceImpl implements GoodsTypeService {

    @Resource
    private GoodsTypeMapper goodsTypeMapper;

    /**
     * 获取商品类型列表
     * @return
     */
    @Override
    public List<GoodsType> getGoodsTypeList() {
        return goodsTypeMapper.getGoodsTypeList();
    }

    /**
     * 新增商品类型
     * @param goodsType
     * @return
     */
    @Override
    public AjaxResult addGoodsType(GoodsType goodsType) {
        //检查商品类型是否存在
        checkGoodsType(goodsType);
        goodsType.setCreateBy(SecurityUtils.getUsername());
        goodsType.setCreateTime(LocalDateTime.now());
        int row  = goodsTypeMapper.addGoodsType(goodsType);
        return row > 0 ?AjaxResult.success("新增商品类型成功") : AjaxResult.error("新增商品类型失败");
    }

    /**
     * 修改商品类型
     * @param goodsTypeId
     * @param goodsType
     * @return
     */
    @Override
    public AjaxResult updateGoodsType(Integer goodsTypeId, GoodsType goodsType) {
        //检查商品类型是否存在
        checkGoodsType(goodsType);
        goodsType.setTypeId(goodsTypeId);
        goodsType.setUpdateBy(SecurityUtils.getUsername());
        goodsType.setUpdateTime(LocalDateTime.now());
        goodsType.setRemark("修改商品类型");
        int row = goodsTypeMapper.updateGoodsType(goodsType);
        return row > 0 ?AjaxResult.success("修改商品类型成功") : AjaxResult.error("修改商品类型失败");
    }

    /**
     * 检查商品类型是否存在
     * @return
     */
    private void checkGoodsType(GoodsType goodsType) {
        //查找商品类型是否存在
        GoodsType goodsType1 = goodsTypeMapper.getGoodsTypeByTypeName(goodsType);
        if (goodsType1 != null){
            throw new ServiceException("商品类型："+ goodsType.getTypeName()+" 已经存在");
        }
    }

    /**
     * 批量删除商品类型
     * @param goodsTypeIds
     * @return
     */
    @Override
    public AjaxResult batchDeleteGoodsType(Integer[] goodsTypeIds) {
        int row = goodsTypeMapper.batchDeleteGoodsType(goodsTypeIds);
        return row > 0 ?AjaxResult.success("删除商品类型成功") : AjaxResult.error("删除商品类型失败");
    }
}
